using System.Windows.Forms; using System.Drawing; using Drawing3d; namespace Sample { public partial class Form1 : Form { MyDevice Device = new MyDevice(); public Form1() { InitializeComponent(); Device.WinControl = this; } public void SetPanning(xy Delta) { Device.ProjectionMatrix= Matrix.Translation((float)Delta.x * 2f / (float)Device.ViewPort.Width, (float)Delta.y * 2f / (float)Device.ViewPort.Height, 0) * Device.ProjectionMatrix; } private void Form1_KeyDown(object sender, KeyEventArgs e) { switch (e.KeyCode) { case Keys.Left: xyz B = Device.Camera.Angles; Device.Camera.Angles = new xyz(0.2, 0.3,0.4); Device.Camera.Angles = B; Device.Camera.Yaw = Device.Camera.Yaw - 0.1; break; case Keys.Right: Device.Camera.Yaw = Device.Camera.Yaw + 0.1; break; case Keys.Up: Device.Camera.Pitch = Device.Camera.Pitch + 0.1; break; case Keys.Down: Device.Camera.Pitch = Device.Camera.Pitch - 0.1; break; case Keys.R: // Roll if (Form.ModifierKeys == Keys.Shift) Device.Camera.Roll = Device.Camera.Roll - 0.1; else Device.Camera.Roll = Device.Camera.Roll + 0.1; break; case Keys.W:// Walk in Z-Axis 0.5 if (Form.ModifierKeys == Keys.Shift) Device.Camera.GoForward(-0.5f); else Device.Camera.GoForward(0.5f); break; case Keys.X: // X-Panning { Point Panning = Device.Camera.Panning; if (Form.ModifierKeys == Keys.Shift) Device.Camera.Panning = new Point(Panning.X - 5, Panning.Y); else Device.Camera.Panning = new Point(Panning.X + 5, Panning.Y); } break; case Keys.Y: // Y-Panning { Point Panning = Device.Camera.Panning; if (Form.ModifierKeys == Keys.Shift) Device.Camera.Panning = new Point(Panning.X, Panning.Y - 5); else Device.Camera.Panning = new Point(Panning.X, Panning.Y + 5); } break; case Keys.N:// Walk in XY- Plane of camera in x-direction if (Form.ModifierKeys == Keys.Shift) Device.Camera.GoForward(-0.2f); else Device.Camera.GoForward(0.2f); break; case Keys.M:// Walk in XY- Plane of camera in y-direction if (Form.ModifierKeys == Keys.Shift) Device.Camera.GoRight( -0.2f); else Device.Camera.GoRight(0.2f); break; case Keys.Z: // Zooming if (Form.ModifierKeys == Keys.Shift) Device.Camera.ZoomFactor = 0.9 * Device.Camera.ZoomFactor; else Device.Camera.ZoomFactor =1.1* Device.Camera.ZoomFactor; break; } } } public class MyDevice:OpenGlDevice { public override void OnPaint() { base.OnPaint(); // Draw a lightgray grid Emission = Color.LightGray; int Count = 100; double Distance = 2; for (int j = 0; j < Count; j++) drawLine(new xyz(-Count / 2 * Distance, j * Distance - Count / 2 * Distance, 0), new xyz(Count / 2 * Distance, j * Distance - Count / 2 * Distance, 0)); for (int j = 0; j < Count; j++) drawLine(new xyz(j * Distance - Count / 2 * Distance, -Count / 2 * Distance, 0), new xyz(j * Distance - Count / 2 * Distance, Count / 2 * Distance, 0)); Emission = Color.Black; // save the ambient material Color SaveAmbient = Ambient; // and draw four Boxes Ambient = Color.Red; drawBox(new xyz(-4, -1, 0), new xyz(4, 1, 2)); Ambient = Color.Green; drawBox(new xyz(-2, 8, 0), new xyz(4, 2, 5)); Ambient = Color.Yellow; drawBox(new xyz(7, 5, 0), new xyz(3, 4, 4)); Translucent = 0.6; Ambient = Color.Blue; drawBox( new xyz(1, 1, 0), new xyz(4, 3, 6)); Translucent = 1; Ambient = SaveAmbient; } protected override void OnCreated() { base.OnCreated(); BackColor = Color.DarkGray; Lights[0].Position = new xyz(-10, -5, 3); // Setzen des Blickwinkels : Perspektive FieldOfView = 30; SnapEnable = false; Camera.LookAt(new xyz(-20, -10, 2), new xyz(0, 0, 2), new xyz(0, 0, 1)); Camera.SetRelativeSystem(); } } }